#include "head.h"
//server main查用户名<<<<专用>>>>>>
int select_uname(MYSQL *conn, int net_fd, char *uname){
    printf("uname:%s\n", uname);
    MYSQL_RES *res;
    char query[100];
    if (strlen(uname)){
        sprintf(query, "SELECT * FROM user_info WHERE user_name = '%s'", uname);
        //printf("%s, %ld\n", uname, strlen(uname));
        printf("%s\n", query);
    }
printf("%s\n", query);
    // 执行查询
    if (mysql_query(conn, query)){
        printf("%s\n", mysql_error(conn));
        return -1;
    }

    res = mysql_store_result(conn);
    if (!res) {
        //printf("查询结果为空\n");
        return -1;
    }
    // 判断是否有匹配结果
    if (mysql_num_rows(res) > 0) {
    send(net_fd, "login sucess\n", strlen("login sucess\n"), 0);
    } else {
        send(net_fd, "wrong token\n", strlen("wrong token\n"), 0);
        mysql_free_result(res);
        return 1; // 返回1 -> 用户名不存在
    }

    mysql_free_result(res);
    return 0; // 返回0 -> 用户名存在

}

// 查询用户名
int check_uname(char *uname){
    // 初始化连接
    MYSQL * conn = mysql_init(NULL); 
    MYSQL_RES *res;
    //MYSQL_ROW row;

    if (!mysql_real_connect(conn, "localhost", "root", "qiangan2799", "netDisk", 0, NULL, 0)){
        // 建立MySQL服务器的连接
        printf("%d\n", mysql_errno(conn));
        return -1;
    }

    mysql_set_character_set(conn, "utf8"); // 设置编码格式(针对字符串)

    char query[100];
    if (strlen(uname)){
        sprintf(query, "SELECT * FROM user_info WHERE user_name = '%s'", uname);
        //printf("%s, %ld\n", uname, strlen(uname));
        printf("%s\n", query);
    }

    // 执行查询
    if (mysql_query(conn, query)){
        printf("%s\n", mysql_error(conn));
        return -1;
    }

    res = mysql_store_result(conn);
    if (!res) {
        printf("查询结果为空\n");
        mysql_close(conn);
        return -1;
    }

    // 判断是否有匹配结果
    if (mysql_num_rows(res) > 0) {
        printf("存在 \"%s\" 用户\n", uname);
    } else {
        printf("\"%s\" 用户不存在\n", uname);
        mysql_free_result(res);
        mysql_close(conn);
        return 1; // 返回1 -> 用户名不存在
    }

    mysql_free_result(res);
    mysql_close(conn);
    return 0; // 返回0 -> 用户名存在
}

// 查询盐值
int get_salt(char *uname, char *salt){
    // 初始化连接
    MYSQL * conn = mysql_init(NULL); 
    MYSQL_RES *res;
    MYSQL_ROW row;

    if (!mysql_real_connect(conn, "localhost", "root", "qiangan2799", "netDisk", 0, NULL, 0)){
        // 建立MySQL服务器的连接
        printf("%d\n", mysql_errno(conn));
        return -1;
    }

    mysql_set_character_set(conn, "utf8"); // 设置编码格式(针对字符串)

    char query[200];
    sprintf(query, "SELECT salt FROM user_info WHERE user_name = '%s'", uname);
    //printf("%s\n", query);
    // 执行查询
    if (mysql_query(conn, query)){
        printf("%s\n", mysql_error(conn));
        return -1;
    }

    res = mysql_store_result(conn);
    if (!res) {
        printf("查询结果为空\n");
        mysql_close(conn);
        return -1;
    }

    row = mysql_fetch_row(res);
    if (!row) {
        printf("用户%s不存在\n", uname);
        mysql_free_result(res);
        mysql_close(conn);
        return -1;
    }

    // 判断是否有匹配结果
    if (mysql_num_rows(res) > 0) {
        strncpy(salt, row[0], strlen(row[0])); // 将密码哈希值拷贝到 passwd 中
        printf("用户%s的盐值为 : %s\n", uname, salt);
    }else {
        printf("盐值不存在\n");
    }

    mysql_free_result(res);
    mysql_close(conn);
    return 0;
}

// 查询密码哈希值
int get_passwd(char *uname, char *passwd){

    // 初始化连接
    MYSQL * conn = mysql_init(NULL); 
    MYSQL_RES *res;
    MYSQL_ROW row;

    if (!mysql_real_connect(conn, "localhost", "root", "qiangan2799", "netDisk", 0, NULL, 0)){
        // 建立MySQL服务器的连接
        printf("%d\n", mysql_errno(conn));
        return -1;
    }

    mysql_set_character_set(conn, "utf8"); // 设置编码格式(针对字符串)

    char query[200];
    sprintf(query, "SELECT passwd FROM user_info WHERE user_name = '%s'", uname);
    //printf("%s\n", query);
    // 执行查询
    if (mysql_query(conn, query)){
        printf("%s\n", mysql_error(conn));
        return -1;
    }

    res = mysql_store_result(conn);
    if (!res) {
        printf("查询结果为空\n");
        mysql_close(conn);
        return -1;
    }

    row = mysql_fetch_row(res);
    if (!row) {
        printf("用户%s不存在\n", uname);
        mysql_free_result(res);
        mysql_close(conn);
        return -1;
    }

    // 判断是否有匹配结果
    if (mysql_num_rows(res) > 0) {
        strncpy(passwd, row[0], strlen(row[0])); // 将密码哈希值拷贝到 passwd 中
        printf("用户%s的密码哈希值为 : %s\n", uname, passwd);
    }else {
        printf("哈希值不存在\n");
    }

    mysql_free_result(res);
    mysql_close(conn);
    return 0;
}

// 存储一条用户信息
int user_info_store(char *uname, char *salt, char *passwd){
    MYSQL *conn;
    //MYSQL_RES *res;
    //MYSQL_ROW row;
    char query[1024];

    // 初始化连接
    conn = mysql_init(NULL);

    if (!mysql_real_connect(conn, "localhost", "root", "qiangan2799", "netDisk", 0, NULL, 0)){
        // 建立MySQL服务器的连接
        fprintf(stderr, "Error: %s\n", mysql_error(conn));
        exit(1);
    }

    if (strlen(uname)){
        // 构建插入数据的SQL语句
        sprintf(query, "INSERT INTO user_info (user_id, user_name, salt, passwd, logout)"
                "VALUES (NULL, '%s', '%s', '%s', 0)", uname, salt, passwd);
    }

    // 执行SQL查询
    if (mysql_query(conn, query)) {
        fprintf(stderr, "Error: %s\n", mysql_error(conn));
        exit(1);
    }

    //建立根目录
    if (strlen(uname)){
        // 构建插入数据的SQL语句
        sprintf(query, "INSERT INTO files ( f_name, f_exist, f_owner, f_father, f_path, f_type, f_finsh)"
                "VALUES ('/', 1, '%s', -1, '/', 1, 1)", uname);
    }
    if (mysql_query(conn, query)) {
        fprintf(stderr, "Error: %s\n", mysql_error(conn));
        exit(1);
    }

    // 关闭连接
    mysql_close(conn);
    return 0;
}
